package com.briup.smartcity_group1.service;

import com.briup.smartcity_group1.bean.basic.BaseUser;

import com.briup.smartcity_group1.exception.ServiceException;

import com.briup.smartcity_group1.utils.JwtUtils;
import com.github.pagehelper.PageInfo;

/** 用户管理相关接口
 * @author congee(congee02 @ 163.com)
 * @date 1/3/2023 12:24 PM
 */
public interface IBaseUserService {

    /**根据id删除用户信息
     * 当删除用户不存在时，删除失败，提示用户已经不存在
     * 当删除用户为管理员时删除失败，进行逻辑删除，将用户的状态设置为 禁用状态 status=1
     * 当删除用户时，如果用户已经发布了咨询信息，需要将对应的咨询信息删除
     * @throws ServiceException 用户不存在
     * @param id 用户id
     */
    void deleteById(int id);

    /**通过token获取当前登录用户的信息
     * 使用 {@link JwtUtils#getInfo(String)} 获取 token 中的 username,
     * 再从数据库中根据 username 读取记录返回
     * @param token 用户的token
     * @return  返回的用户信息
     * @throws ServiceException token 校验不通过 或者 在 黑名单 中
     */
    BaseUser currentUserInfo(String token);

    /**根据用户名角色、名字分页模糊查询用户信息
     * 查询用户名和用户角色信息为可选查询条件
     * @param name 模糊查找的姓名
     * @param role 身份
     * @param pageNum  页码
     * @param pageSize  单页记录数量
     * @return  搜索结果的页面信息
     */
    PageInfo<BaseUser> findBaseUserLikeNameAndRoleByPage(String name, Integer role, int pageNum, int pageSize);


    /**根据用户id更新用户信息
     * 允许管理员对所有用户信息进行更新操作, 如果用户是普通用户，只能更新自己的用户信息
     * @param baseUser 更新用户信息
     */
    void updateById(BaseUser baseUser);

    /**更改用户头像
     * @param id 用户id
     * @param iconUrl 头像url
     * @throws ServiceException 用户不存在
     */
    void changeIcon(Integer id, String iconUrl);
}
